package Days10;

import java.util.ArrayList;
import java.util.Scanner;

/*
做一个可以增删改查的学生管理系统
 */

public class Student {
    public static void main(String[] args) {
        ArrayList<Students> list = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        loop:
        while (true) {
            System.out.println("---------欢迎来到学生管理系统---------");
            System.out.println("1：添加学生");
            System.out.println("2: 删除学生");
            System.out.println("3: 修改学生");
            System.out.println("4：查询学生");
            System.out.println("5: 退出");

            System.out.println("请输入你的选择");
            String choose = sc.next();

            switch (choose) {
                case "1":
                    addStudent(list);
                    continue;
                case "2":
                    deleteStudent(list);
                    continue;
                case "3":
                    updateStudent(list);
                    continue;
                case "4":
                    selectStudent(list);
                    continue;
                case "5":
                    System.out.println("退出");
                    break loop;
                default:
                    System.out.println("没有这个选择");
            }
        }


    }

    //写一个添加学生的方法
    public static void addStudent(ArrayList<Students> list) {
        //利用空参创建一个学生对象
        Students s = new Students();
        Scanner sc = new Scanner(System.in);
        //将输入的信息存到对象当中去
        System.out.println("请输入学生的ID");
        String id = null;
        //判断学生的ID是否唯一
        while(true){
            id = sc.next();
            boolean flag = contains(list,id);
            if(flag){
                System.out.println("ID号已经重复，请重新输入");
            }else{
                s.setId(id);
                break;
            }
        }

        System.out.println("请输入学生的姓名");
        String name = sc.next();
        s.setName(name);

        System.out.println("请输入学生的年龄");
        String age = sc.next();
        s.setAge(age);

        System.out.println("请输入学生的家庭住址");
        String address = sc.next();
        s.setAddress(address);

        //将保存好的对象s赋给集合list
        list.add(s);

        System.out.println("添加成功");
    }

    //写一个删除学生的方法，
    // 删除学生的信息，需要集合当中的索引
    public static void deleteStudent(ArrayList<Students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你要删除的学生的ID");
        String sid = sc.next();
        //找到要删除的学生对象的索引
        int index = selectIndex(list,sid);
        if(index>= 0){
            list.remove(index);
            System.out.println("学生的信息已删除");
        }else{
            System.out.println("学生的信息不存在");
        }

    }

    //写一个修改学生的方法
    public static void updateStudent(ArrayList<Students> list) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生的ID");
        String id = sc.next();
        //利用ID来找到索引。
        int index = selectIndex(list,id);

        if(index < 0){
            System.out.println("输入的学生ID号不存在");
            return;
        }
        //往下执行表明ID号存在
        
        Students s = list.get(index);
        System.out.println("请输入新的学生的ID");
        String newId = sc.next();
        s.setId(newId);

        System.out.println("请输入新的学生的姓名");
        String name = sc.next();
        s.setName(name);

        System.out.println("请输入学生的新的年龄");
        String age = sc.next();
        s.setAge(age);

        System.out.println("请输入学生的新的家庭住址");
        String address = sc.next();
        s.setAddress(address);
    }

    //写一个查询学生的方法
    public static void selectStudent(ArrayList<Students> list) {
        //创建对象来遍历打印集合里面的元素

        Students stu = new Students();

        System.out.println("ID  姓名  年龄  住址");
        for (int i = 0; i < list.size(); i++) {
            //集合里存的是对象，创建一个s来临时保存对象
            Students s = list.get(i);
            System.out.println(s.getId()+ " " + s.getName() +
                    " " + s.getAge() + "  " + s.getAddress());

        }
    }

    //判断学生的ID在集合当中是否已经存在
    //存在返回true，不存在返回false
    public static boolean contains(ArrayList<Students> list, String id) {
        //遍历几个当中的元素
        Students stu =  new Students();
        for (int i = 0; i < list.size(); i++) {
            stu = list.get(i);
            String sid = stu.getId();
            if(sid.equals(id)){
                //此时，输入的学生ID与集合当中的ID号（sid）有相同的
                // 表示ID已存在,返回false
                return true;
            }
        }
        //循环遍历结束，此时表示没有重合的ID
        return false;
    }

    //利用ID查看并且返回索引的方法
    public static int selectIndex(ArrayList<Students> list, String id){
        //创建一个学生对象来遍历集合
        Students stu = new Students();
        for (int i = 0; i < list.size(); i++) {
            stu = list.get(i);
            String sid = stu.getId();
            if(sid.equals(id)){
                return i;
            }
        }
        return -1;
    }
}

